"""
数据库管理模块 - 文言文语料库管理
"""

import sqlite3
import json
from pathlib import Path
import csv

class 文言数据库:
    def __init__(self, 数据库路径="wenyan_corpus.db"):
        self.数据库路径 = 数据库路径
        self.连接 = None
        self.初始化数据库()
    
    def 连接数据库(self):
        """连接到SQLite数据库"""
        try:
            self.连接 = sqlite3.connect(self.数据库路径)
            return True
        except Exception as e:
            print(f"❌ 数据库连接失败: {e}")
            return False
    
    def 初始化数据库(self):
        """初始化数据库表结构"""
        if not self.连接数据库():
            return False
            
        try:
            游标 = self.连接.cursor()
            
            # 创建古文表
            游标.execute('''
                CREATE TABLE IF NOT EXISTS 古文 (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    标题 TEXT NOT NULL,
                    作者 TEXT,
                    朝代 TEXT,
                    内容 TEXT NOT NULL,
                    类型 TEXT, -- 诗、词、曲、赋、文等
                    标签 TEXT,
                    来源 TEXT,
                    添加时间 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                )
            ''')
            
            # 创建词条表
            游标.execute('''
                CREATE TABLE IF NOT EXISTS 词条 (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    词条 TEXT NOT NULL UNIQUE,
                    释义 TEXT,
                    例句 TEXT,
                    出处 TEXT,
                    添加时间 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                )
            ''')
            
            # 创建韵律规则表
            游标.execute('''
                CREATE TABLE IF NOT EXISTS 韵律规则 (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    名称 TEXT NOT NULL,
                    规则 TEXT NOT NULL,
                    示例 TEXT,
                    描述 TEXT,
                    添加时间 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                )
            ''')
            
            self.连接.commit()
            print("✅ 数据库初始化成功")
            return True
            
        except Exception as e:
            print(f"❌ 数据库初始化失败: {e}")
            return False
        finally:
            if self.连接:
                self.连接.close()
    
    def 添加古文(self, 标题, 内容, 作者=None, 朝代=None, 类型=None, 标签=None, 来源=None):
        """添加古文到数据库"""
        if not self.连接数据库():
            return False
            
        try:
            游标 = self.连接.cursor()
            游标.execute('''
                INSERT INTO 古文 (标题, 作者, 朝代, 内容, 类型, 标签, 来源)
                VALUES (?, ?, ?, ?, ?, ?, ?)
            ''', (标题, 作者, 朝代, 内容, 类型, 标签, 来源))
            
            self.连接.commit()
            print(f"✅ 已添加古文: {标题}")
            return True
            
        except Exception as e:
            print(f"❌ 添加古文失败: {e}")
            return False
        finally:
            if self.连接:
                self.连接.close()
    
    def 添加词条(self, 词条, 释义=None, 例句=None, 出处=None):
        """添加词条到数据库"""
        if not self.连接数据库():
            return False
            
        try:
            游标 = self.连接.cursor()
            游标.execute('''
                INSERT INTO 词条 (词条, 释义, 例句, 出处)
                VALUES (?, ?, ?, ?)
            ''', (词条, 释义, 例句, 出处))
            
            self.连接.commit()
            print(f"✅ 已添加词条: {词条}")
            return True
            
        except Exception as e:
            print(f"❌ 添加词条失败: {e}")
            return False
        finally:
            if self.连接:
                self.连接.close()
    
    def 批量导入古文(self, 文件路径):
        """从JSON文件批量导入古文"""
        try:
            with open(文件路径, 'r', encoding='utf-8') as 文件:
                数据列表 = json.load(文件)
                
                成功数量 = 0
                for 数据 in 数据列表:
                    if self.添加古文(
                        数据.get('标题'),
                        数据.get('内容'),
                        数据.get('作者'),
                        数据.get('朝代'),
                        数据.get('类型'),
                        数据.get('标签'),
                        数据.get('来源')
                    ):
                        成功数量 += 1
                
                print(f"✅ 批量导入完成，成功导入 {成功数量} 篇古文")
                return True
                
        except Exception as e:
            print(f"❌ 批量导入失败: {e}")
            return False
    
    def 查询古文(self, 条件=None):
        """查询古文"""
        if not self.连接数据库():
            return []
            
        try:
            游标 = self.连接.cursor()
            
            if 条件:
                游标.execute('SELECT * FROM 古文 WHERE ' + 条件)
            else:
                游标.execute('SELECT * FROM 古文')
                
            结果 = 游标.fetchall()
            return 结果
            
        except Exception as e:
            print(f"❌ 查询失败: {e}")
            return []
        finally:
            if self.连接:
                self.连接.close()
    
    def 统计信息(self):
        """获取数据库统计信息"""
        if not self.连接数据库():
            return {}
            
        try:
            游标 = self.连接.cursor()
            
            游标.execute('SELECT COUNT(*) FROM 古文')
            古文数量 = 游标.fetchone()[0]
            
            游标.execute('SELECT COUNT(*) FROM 词条')
            词条数量 = 游标.fetchone()[0]
            
            游标.execute('SELECT COUNT(DISTINCT 朝代) FROM 古文')
            朝代数量 = 游标.fetchone()[0]
            
            return {
                "古文数量": 古文数量,
                "词条数量": 词条数量,
                "朝代数量": 朝代数量
            }
            
        except Exception as e:
            print(f"❌ 统计失败: {e}")
            return {}
        finally:
            if self.连接:
                self.连接.close()

# 示例用法
if __name__ == "__main__":
    数据库 = 文言数据库()
    
    # 添加示例数据
    数据库.添加古文(
        "静夜思",
        "床前明月光，疑是地上霜。举头望明月，低头思故乡。",
        "李白",
        "唐",
        "诗",
        "思乡,月亮",
        "《唐诗三百首》"
    )
    
    # 查询所有古文
    所有古文 = 数据库.查询古文()
    print("所有古文:", 所有古文)
    
    # 获取统计信息
    统计 = 数据库.统计信息()
    print("数据库统计:", 统计)